From 6599cb001fa184ed224c655519d659f168e9face Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 31 Aug 2021 23:01:43 -0400 Subject: [PATCH] gsk: Add font options to the glyph cache The cairo_t that we create to render glyphs for the glyph cache needs to match the font options that are supposedly governing how glyphs are drawn. Since we allow font options to be different per widget in gtk, we need to have them at least at the level of individual render nodes. Adding them to the lookup key for the glyph cache has the side effect of solving another problem: We are not flushing the cache when font options change. --- gsk/ngl/gsknglglyphlibrary.c | 8 ++++++++ gsk/ngl/gsknglglyphlibraryprivate.h | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gsk/ngl/gsknglglyphlibrary.c b/gsk/ngl/gsknglglyphlibrary.c index 9f269d8643..fdfa1abe30 100644 --- a/gsk/ngl/gsknglglyphlibrary.c +++ b/gsk/ngl/gsknglglyphlibrary.c @@ -166,11 +166,19 @@ render_glyph (cairo_surface_t *surface, { cairo_t *cr; cairo_glyph_t glyph; + cairo_font_options_t *options; g_assert (surface != NULL); g_assert (scaled_font != NULL); cr = cairo_create (surface); + options = cairo_font_options_create (); + cairo_font_options_set_hint_metrics (options, key->hint_metrics ? CAIRO_HINT_METRICS_ON : CAIRO_HINT_METRICS_OFF); + cairo_font_options_set_antialias (options, key->antialias ? CAIRO_ANTIALIAS_GRAY : CAIRO_ANTIALIAS_NONE); + cairo_font_options_set_hint_style (options, key->hint_style); + cairo_set_font_options (cr, options); + cairo_font_options_destroy (options); + cairo_set_scaled_font (cr, scaled_font); cairo_set_source_rgba (cr, 1, 1, 1, 1); diff --git a/gsk/ngl/gsknglglyphlibraryprivate.h b/gsk/ngl/gsknglglyphlibraryprivate.h index a9f099c0b5..6d9e81060e 100644 --- a/gsk/ngl/gsknglglyphlibraryprivate.h +++ b/gsk/ngl/gsknglglyphlibraryprivate.h @@ -35,7 +35,10 @@ typedef struct _GskNglGlyphKey PangoGlyph glyph; guint xshift : 2; guint yshift : 2; - guint scale : 28; /* times 1024 */ + guint hint_metrics : 1; + guint antialias : 1; + guint hint_style : 3; + guint scale : 23; /* times 1024 */ } GskNglGlyphKey; typedef struct _GskNglGlyphValue -- 2.30.2